package service;

import dao.UserDAO;
import dao.UserDAOImpl;
import entity.User;

/**
 * 用户服务类 (业务逻辑层)
 *
 * 简单说：这个类是用户模块的“大脑”，负责处理和用户相关的所有业务逻辑。
 * 它接收来自界面（UI）的指令，然后调用DAO层的方法来操作数据库，
 * 并在中间做一些判断和处理，比如注册时检查用户名是否已被占用。
 */
public class UserService {

    // 声明一个UserDAO类型的变量，用来调用DAO层的方法
    private UserDAO userDAO;

    /**
     * 构造方法：初始化UserService对象时，同时创建一个UserDAOImpl的实例。
     * 这样，UserService就可以通过userDAO变量来调用数据库操作了。
     */
    public UserService() {
        // 创建一个具体的DAO实现类对象并赋值
        this.userDAO = new UserDAOImpl();
    }

    /**
     * 处理用户注册业务
     */
    public boolean registerUser(String username, String password, String phone, String email) {
        // 先检查用户名是否已经被别人注册了
        // 调用DAO层的方法，根据用户名去数据库里查询
        if (userDAO.getUserByUsername(username) != null) {
            // 如果查询到了用户（返回的不是null），说明用户名已存在
            System.out.println("用户名已存在！");
            return false; // 注册失败
        }

        // 如果用户名不存在，就创建一个新的User对象，把用户输入的信息存进去
        User user = new User(username, password, phone, email);

        // 调用DAO层的方法，把这个新用户对象保存到数据库里
        // DAO层的addUser方法会返回一个boolean值，表示插入是否成功
        return userDAO.addUser(user);
    }

    /**
     * 处理用户登录业务
     */
    public User loginUser(String username, String password) {
        // 调用DAO层的方法，去数据库验证用户名和密码是否匹配
        if (userDAO.validateUser(username, password)) {
            // 如果验证成功（用户名和密码对了），就去数据库查询这个用户的完整信息
            return userDAO.getUserByUsername(username);
        }
        return null;
    }

    /**
     * 处理更新用户信息的业务
     */
    public boolean updateUserInfo(User user) {
        // 直接调用DAO层的方法来更新数据库中的用户信息
        return userDAO.updateUser(user);
    }

    /**
     * 根据用户ID获取用户的完整信息
     */
    public User getUserById(int userId) {
        // 直接调用DAO层的方法来查询
        return userDAO.getUserById(userId);
    }
}